#include"sem.h"

Sem::Sem()
{
}

Sem::~Sem()
{
}

// 1.创建信号量
int Sem::sem_create(key_t key,int num_sems)
{
    int res=0;
    res=semget(key,num_sems,IPC_CREAT|0666);
    if(res<0)
    {
        perror("semget error");
        return 0;
    }
    return res;
}
//2.设置信号量
int  Sem::sem_setval(int semid,int semindex,int val)
{
    union semun arg;
    arg.val=val;
    int res=semctl(semid,semindex,SETVAL,arg);
    
    return res;
}

//信号量p操作
int Sem::sem_p(int semid,int semindex)
{
    int res=0;
    struct sembuf buf={semindex,-1,SEM_UNDO};
    res=semop(semid,&buf,1);
    if(res<0)
    {
        perror("semop error ");
        return 0;
    }
    return res;
}

//信号量V操作
int Sem::sem_v(int semid,int semindex)
{
    int res=0;
    struct sembuf buf={semindex,1,SEM_UNDO};
    res=semop(semid,&buf,1);
    if(res<0)
    {
        perror("semop error ");
        return 0;
    }
    return res;
}
